package com.bigcat.gulimall.demo.java17;

import org.junit.jupiter.api.Test;
import org.springframework.boot.test.context.SpringBootTest;

import java.io.IOException;
import java.net.URI;
import java.net.http.HttpClient;
import java.net.http.HttpRequest;
import java.net.http.HttpResponse;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Optional;

/**
 * @author sufer_yuan
 * @since 2024/4/1
 */
@SpringBootTest
public class TestFeature {

    /**
     * 局部变量类型推断（var关键字）：允许在局部变量声明中使用var关键字，由编译器推断变量的类型。
     */
    @Test
    public void test1() {
        var list = new ArrayList<String>();
        String name = "java nice";
        list.add(name);
        System.out.println(list);
    }

    /**
     * ThreadLocal 类增强：新增了一个copy()方法，用于创建ThreadLocal实例的副本。
     */
    @Test
    public void test1_1(){
        ThreadLocal<String> threadLocal = ThreadLocal.withInitial(() -> "initialValue");
//        ThreadLocal<String> copy = threadLocal.copy();
        String s = threadLocal.get();
        System.out.println(s);

    }

    /**
     *Java 11（2018年发布）：
     *
     * HTTP 客户端（标准化）：引入了新的标准化HTTP客户端API，用于替代HttpURLConnection。
     */
    @Test
    public void test2() throws IOException, InterruptedException {
        HttpClient client = HttpClient.newHttpClient();
        HttpRequest request = HttpRequest.newBuilder()
                .uri(URI.create("https://baidu.com"))
                .build();
        HttpResponse<String> response = client.send(request, HttpResponse.BodyHandlers.ofString());
        System.out.println(response.body());
    }

    /**
     * 局部变量语法扩展：允许在Lambda表达式中使用var关键字声明局部变量。
     */
    @Test
    public void test3(){
        var list = Arrays.asList("apple", "banana", "orange");
        list.forEach((var s) -> System.out.println(s));
    }

    /**
     *增强的 Optional 类：新增了一系列新的方法，如isEmpty()、or()、stream()等。
     */
    @Test
    public void test4() {
        String str = "  Hello, World!  ";
        System.out.println(str.strip()); // "Hello, World!""
    }

    /**
     *增强的 Optional 类：新增了一系列新的方法，如isEmpty()、or()、stream()等。
     */
    @Test
    public void test5() {
        Optional<String> name = Optional.of("name");
        System.out.println(name.stream().count());
        System.out.println(name.isEmpty());
    }




}
